/*
数据主体分析：
订单信息（序号、订餐人、餐品信息、送餐时间、送餐地址、总金额、订单状态）
菜品信息（序号、菜名、单价）用于订餐、点赞
项目框架整体搭建
   欢迎菜单展示
       控制台输出语句
   退出（选择了6、选择了1-6之外的数字）
       跳转语句break;
     相应用户选择（1-6）用switch

 我要订餐
       循环遍历（菜品信息）
       条件判断（送餐时间、送餐费） 用条件判断、三目运算符
 查看餐袋
       循环遍历（订单信息）
       条件判断（判断订单非空）
 签收订单
       条件判断（判断订单是否存在，并且订单状态是已预定）
 删除订单
       条件判断（判断订单是否存在，并且订单状态是已完成）
 我要点赞
       条件判断（判断是否存在菜品、点赞数）
 */
package itSystemCase1;
import java.util.Scanner;
public class case1 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String[] names=new String[4];//订餐人
        String[] dishNames= {"红烧带鱼","鱼香肉丝","时令蔬菜"}; //菜品名称
        double[] prices={38.0,20.0,10.0}; //单价
        String[] dishMag=new String[4]; //餐品信息（菜品名称+份数）
        int[] times=new int[4];//配送时间
        String[] addresses=new String[4];//送餐地址
        double[] sumprices=new double[4];//总金额
        int[] states=new int[4];//订单状态（0表示已预定，1表示已完成）
        int[] priseNums=new int[4];//点赞数
        /*
        序号 订单人 餐品信息 送餐日期   送餐地址       总金额    订单状态
        1    张晴   2份     3日       天成路207号   76.0元    已完成
        2    张晴   2份     10日      天成路207号   20.0元    已预定
         */
        //初始化2个订单信息
        names[0]="张三";
        dishMag[0]="红烧带鱼 2份";
        times[0]=15;
        addresses[0]="官渡区108号";
        sumprices[0]=76.0;//餐费大于50元，加6元配送费
        states[0]=0;//已预定

        names[1]="李四";
        dishMag[1]="鱼香肉丝 3份";
        times[1]=17;
        addresses[1]="天成路107号";
        sumprices[1]=60.0;//餐费大于50元，加6元配送费
        states[1]=1;//已完成

        int num=0; //num表示用户返回的数字，num=0时，重复返回主菜单，num在每次用户订餐后进行判断
        boolean flag=false;//记录用户是否退出系统，true退出，false不退出
        do {
            System.out.println("欢迎使用”吃货联盟订餐系统“");
            System.out.println("**********************");
            System.out.println("1、我要订餐");
            System.out.println("2、查看餐袋");
            System.out.println("3、签收订单");
            System.out.println("4、删除订单");
            System.out.println("5、我要点赞");
            System.out.println("6、退出系统");
            System.out.println("**********************");
            System.out.print("请选择：");
            int choose=sc.nextInt();//choose接收输入的1 2 3 4 5 6
            switch (choose){
                case 1:
                    System.out.println("*********1、我要订餐**********");
                    System.out.println("序号\t\t菜名\t\t单价");
                    for (int i=0;i< names.length;i++){
                        if (names[i]==null){
                            for (int j=0;j< dishNames.length;j++){
                                System.out.println((j+1)+"\t\t"+dishNames[j]+"\t"+prices[j]+"元");
                            }
                            System.out.print("请输入您要点单的序号：");
                            int a=sc.nextInt();//a表示要点单的序号
                            while (a<0 || a> names.length){
                                System.out.print("没有此菜！请您重新输入您需要点单的序号：");
                                a=sc.nextInt();
                            }
                            System.out.print("请输入点餐人的姓名：");
                            names[i]=sc.next();
                            System.out.print("请输入您需要点餐的份数：");
                            int b=sc.nextInt(); //b表示点单的份数
                            dishMag[i]=dishNames[a-1]+" "+b+"份";
                            System.out.print("请输入您需要的配送时间：");
                            times[i]= sc.nextInt();
                            while (times[i]<10 || times[i]>20){
                                System.out.println("超时！请重新输入您需要的配送时间");
                                times[i]= sc.nextInt();
                            }
                            System.out.print("请输入您需要的配送地址:");
                            addresses[i]=sc.next();
                            //总金额
                             sumprices[i]=prices[a-1]*b;
                            if (sumprices[i]>50){
                                sumprices[i] +=6;
                            }
                            //订单状态
                            states[i]=0;
                            break;
                        }
                    }
                    break;
                case 2:
                    System.out.println("*********2、查看餐袋**********");
                    System.out.println("序号\t\t订单人\t\t餐品信息\t\t\t送餐时间\t\t配送地址\t\t\t总金额\t\t订单状态");
                    for (int i=0;i< names.length;i++){
                        if (names[i] !=null){  //输出非空的信息
                            String time=times[i]+"点";
                            String state=states[i]==0?"已预定":"已完成";
                            System.out.println((i+1)+"\t\t"+names[i]+"\t\t\t"+dishMag[i]+"\t\t"+time+"\t\t"+addresses[i]+"\t\t"+sumprices[i]+"\t\t"+state);
                        }
                    }
                    break;
                case 3:
                    System.out.println("*********3、签收订单**********");
                    //签收之前，要先判断订单是否存在，用boolean
                    //false-不存在，true-存在，并且是预定状态就能签收，如果是完成状态，就不能签收
                    boolean isSign=false;
                    System.out.println("请输入您要签收的单号：");
                    int signNo= sc.nextInt();
                    for (int i=0;i<names.length;i++){
                        if (names[i] !=null && states[i]==0 && i==signNo-1){
                            //有订单，并且用户输入的订单编号能找到，订单式已预定状态，就能签收
                            isSign=true;
                            states[i]=1;
                            System.out.println("订单签收成功！");
                        }else if (names[i] !=null && states[i]==1 && i==states[i]-1){
                            //有订单信息，并且用户输入的订单编号能找到，订单状态是已完成，就不能签收
                            isSign=true;
                            System.out.println("您选择的订单已经完成签收，不能再次签收！");
                        }
                    }
                    if (!isSign){
                        System.out.println("您选择的订单不存在！");
                    }
                    break;
                case 4:
                    System.out.println("*********4、删除订单**********");
                    //删除之前，要先判断订单是否存在，用boolean
                    //false-不存在，不能删除。true-存在
                    boolean isDelete=false;
                    System.out.println("请输入您要删除的订单号：");
                    int deleteNo= sc.nextInt();
                    for (int i=0;i<names.length;i++){
                        if (names[i] !=null && states[i]==1 && i==deleteNo-1){
                            for (int j=i;j<names.length-1;j++) {
                                //有订单信息,并且用户输入的订单编号能找到，并且订单状态是已完成，就能删除
                                isDelete = true;
                                //找到删除订单的位置下标i,把i后面的元素依次往前移动，最后一个元素置空
                                //注意：移动的过程其实就是把后面的一个元素往前一个元素复制的过程
                                //最后一个元素一定要置空，置空后就可以下新的订单了
                                names[j] = names[j + 1];
                                dishMag[j] = dishMag[j + 1];
                                times[j] = times[j + 1];
                                addresses[j] = addresses[j + 1];
                                sumprices[j] = sumprices[j + 1];
                                states[j] = states[j + 1];
                            }
                                names[names.length-1]=null;
                                dishMag[names.length-1]=null;
                                times[names.length-1]=0;
                                addresses[names.length-1]=null;
                                sumprices[names.length-1]=0.0;
                                states[names.length-1]=0;
                                System.out.println("订单删除成功！");
                            }else if(names[i] !=null && states[i]==0 && i==deleteNo-1){
                                //有订单信息，并且用户输入的订单编号能找到，订单状态为已预定，就不能删除
                                isDelete=true;
                                System.out.println("订单删除失败！");
                            }
                        if (!isDelete){
                            System.out.println("您选择的订单不存在！");
                        }
                    }
                    break;
                case 5:
                    System.out.println("*********5、我要点赞**********");
                    System.out.println("序号\t\t菜名\t单价");
                    for (int i=0;i<dishNames.length;i++){
                        String priseNum=(priseNums[i]>0?priseNums[i]+"赞":" ");
                        String price=prices[i]+"元";
                        System.out.println((i+1)+"\t\t"+dishMag[i]+"\t"+price+"\t"+priseNum);
                    }
                    //点赞
                    System.out.println("请选择您要点赞的菜品序号：");
                    int priseNum= sc.nextInt();
                    while (priseNum<1 || priseNum>dishNames.length){
                        System.out.println("本店没有这个菜品。无法点赞！请您重新输入一个菜品序号：");
                        priseNum=sc.nextInt();
                    }
                    //关键点：把哪个位置的菜品点赞数+1，点赞菜品的位置=praiseNum-1
                    priseNums[priseNum-1]++; //赞数+1
                    System.out.println("点赞成功！");
                    break;
                case 6:
                    //退出系统
                    flag=true;
                    break;
                default:
                    //退出系统
                    flag=true;
                    break;
            }
            if(!flag){ //!flag等同于flag=false;
                System.out.print("请输入0返回：");
                 num=sc.nextInt();
            }else {
                break;
            }
        }while (num==0);
            System.out.println("谢谢使用！欢迎下次光临！");
    }
}
